# For each..next

L'istruzione di controllo for each..next è un costrutto per la ripetizione di script che esegue una o più istruzioni per ogni valore in un elenco le cui voci sono separate da virgole. Le istruzioni incluse nel ciclo fra for e next verranno eseguite per ogni valore nell'elenco.

Sintassi:

Una sintassi speciale consente di generare elenchi contenenti nomi di file e di directory nella directory attuale.

for each var in list

[statements]

[exit for [ ( when | unless ) condition ]

[statements]

next [var]

Argomenti:

Argomenti

| Argomento | Descrizione |
| --- | --- |
| var | Il nome di una variabile di script che acquisisce un nuovo valore dall'elenco a ogni esecuzione del ciclo. Se var viene specificato dopo next, deve avere lo stesso nome di variabile rilevato dopo l'istruzione for each corrispondente. |

Il valore della variabile var può essere modificato dalle istruzioni all'interno del ciclo, tuttavia l'utilizzo di questa procedura di programmazione non è consigliato.

Se all'interno del ciclo è presente una clausola exit for, l'esecuzione dello script verrà trasferita alla prima istruzione dopo la clausola next indicando quindi la fine del ciclo. Una clausola exit for può essere resa condizionale dall'utilizzo opzionale di un suffisso when o unless.

Nota informaticaPoiché for each..next è un'istruzione di controllo che termina con un punto e virgola o con un carattere di fine riga, ciascuna delle tre possibili clausole corrispondenti (for each, exit for e next) deve essere contenuta in una sola riga.

Sintassi:

list := item { , item }

item := constant | (expression) | filelist mask | dirlist mask | fieldvaluelist mask

Argomenti

| Argomento | Descrizione |
| --- | --- |
| constant | Qualsiasi numero o stringa. Tenere presente che una stringa inserita direttamente nello script deve essere racchiusa tra virgolette singole. Se la stringa non viene racchiusa tra virgolette singole, verrà interpretata come una variabile, pertanto verrà utilizzato il valore della variabile. Non è necessario che i numeri siano racchiusi tra virgolette singole. |
| expression | Un'espressione arbitraria. |
| mask | Una maschera di un nome di file o di cartella che può includere un carattere qualsiasi di nome di file valido, così come i caratteri speciali standard, quali \* e ?.<br><br>È possibile utilizzare percorsi di file assoluti o percorsi lib://. |
| condition | Un'espressione logica che restituisce un valore True o False. |
| statements | Qualsiasi gruppo di una o più istruzioni dello script di Qlik Sense. |
| filelist mask | Questa sintassi restituisce un elenco con valori separati da virgole di tutti i file presenti nella directory attuale che presentano una corrispondenza con la maschera del nome di file.<br><br>Nota informaticaQuesto argomento supporta esclusivamente le connessioni alla libreria in modalità standard. Vedere [Restrizione dell'accesso al file system](https://help.qlik.com/it-IT/sense/May2025/Subsystems/Hub/Content/Sense_Hub/LoadData/file-system-access-restriction.htm) |
| dirlist mask | Questa sintassi restituisce un elenco con valori separati da virgole di tutte le cartelle incluse nella cartella attuale che presentano una corrispondenza con la maschera del nome di file.<br><br>Nota informaticaQuesto argomento supporta esclusivamente le connessioni alla libreria in modalità standard. Vedere [Restrizione dell'accesso al file system](https://help.qlik.com/it-IT/sense/May2025/Subsystems/Hub/Content/Sense_Hub/LoadData/file-system-access-restriction.htm) |
| fieldvaluelist mask | Questa sintassi ripete i valori di un campo già caricato in Qlik Sense. |

Nota di avvisoQlik Connettori provider di archiviazione Web e altre connessioni DataFiles non supportano le maschere di filtro che utilizzano caratteri speciali (\* e ?).

Esempio 1: Caricamento di un elenco di file

```
// LOAD the files 1.csv, 3.csv, 7.csv and xyz.csv
for each a in 1,3,7,'xyz'
   LOAD * from file$(a).csv;
next
```

Esempio 2: Creazione di un elenco di file sul disco

In questo esempio viene caricato un elenco di tutti i file correlati a Qlik Sense in una cartella.

```

sub DoDir (Root)
   for each Ext in 'qvw', 'qva', 'qvo', 'qvs', 'qvc', 'qvf', 'qvd'

      for each File in filelist (Root&'/*.' &Ext)

         LOAD 
            '$(File)' as Name, 
            FileSize( '$(File)' ) as Size, 
            FileTime( '$(File)' ) as FileTime
         autogenerate 1;

      next File

   next Ext
   for each Dir in dirlist (Root&'/*' )

      call DoDir (Dir)

   next Dir

end sub

call DoDir ('lib://DataFiles')
```

Esempio 3: Ripetizione dei valori di un campo

In questo esempio viene ripetuto l'elenco di valori caricati di FIELD e viene generato un nuovo campo NEWFIELD. Per ciascun valore di FIELD, verranno creati due record NEWFIELD.

```

load * inline [
FIELD
one
two
three
];

FOR Each a in FieldValueList('FIELD')
LOAD '$(a)' &'-'&RecNo() as NEWFIELD AutoGenerate 2;
NEXT a 
```

La tabella risultante avrà l'aspetto seguente:

Example table

| NEWFIELD |
| --- |
| one-1 |
| one-2 |
| two-1 |
| two-2 |
| three-1 |
| three-2 |

## Ulteriori informazioni

* [For..next](https://help.qlik.com/it-IT/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/For.htm)
* [Next](https://help.qlik.com/it-IT/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Next.htm)
* [Exit](https://help.qlik.com/it-IT/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptControlStatements/Exit.htm)